<?php
namespace app\common\service\utils;

use getID3;

class FFmpeg{

    /**
     * 获取FFmpeg版本
     *
     * @return string
     */
    public static function version()
    {
        return exec('ffmpeg -version 2>&1');
    }

    /**
     * 获取FFmpeg编码器
     *
     * @return string
     */
    public static function encoder()
    {
        return exec('ffmpeg -encoders 2>&1');
    }

    /**
     * 获取FFmpeg解码器
     *
     * @return string
     */
    public static function decoder()
    {
        return exec('ffmpeg -decoders 2>&1');
    }

    /**
     * 获取FFmpeg格式
     *
     * @return string
     */
    public static function format()
    {
        return exec('ffmpeg -formats 2>&1');
    }

    /**
     * 获取FFmpeg帮助
     *
     * @return string
     */
    public static function help()
    {
        return exec('ffmpeg -h 2>&1');
    }
    public static function getVideoLength($filePath) {
        // 确保文件存在
        if (!file_exists($filePath)) {
            return "文件不存在！";
        }

        // 确保FFmpeg已安装
        $ffmpegPath = shell_exec('which ffmpeg'); // 获取FFmpeg的安装路径
        if (empty($ffmpegPath)) {
            return "FFmpeg 未安装！";
        }

        // 使用 FFmpeg 获取视频信息
        $cmd = "ffmpeg -i " . escapeshellarg($filePath) . " 2>&1";
        $output = shell_exec($cmd);

        // 从输出中提取视频时长
        if (preg_match('/Duration: (\d+):(\d+):(\d+\.\d+)/', $output, $matches)) {
            // 解析小时、分钟、秒并转换成秒数
            $hours = (int)$matches[1];
            $minutes = (int)$matches[2];
            $seconds = (float)$matches[3];

            // 计算总时长（秒）
            $totalSeconds = $hours * 3600 + $minutes * 60 + $seconds;

            return $totalSeconds; // 返回秒数
        } else {
            return "无法获取视频时长！";
        }
    }


    public static function getDurationFormUrl($Url) {
        // 下载视频文件到临时文件
        $tempFile = tempnam(sys_get_temp_dir(), 'video_') . '.mp4';
        file_put_contents($tempFile, fopen($Url, 'r'));

        // 确保文件存在
        if (!file_exists($tempFile)) {
            return "文件下载失败！";
        }

        // 初始化 getID3
        $getID3 = new getID3;
        $fileInfo = $getID3->analyze($tempFile);
        // 检查并返回视频长度
        if (isset($fileInfo['playtime_seconds'])) {
            $length = $fileInfo['playtime_seconds']; // 返回时长
        } else {
            $length = "无法获取视频长度！";
        }

        // 删除临时文件
        unlink($tempFile);

        return $length;
    }

    public static function getDurationByID3($filePath) {
        // 确保文件存在
        if (!file_exists($filePath)) {
            return "文件不存在！";
        }

        // 初始化 getID3
        $getID3 = new getID3;
        $fileInfo = $getID3->analyze($filePath);

        // 检查并返回视频长度（秒数）
        if (isset($fileInfo['playtime_seconds'])) {
            return (int) $fileInfo['playtime_seconds']; // 返回时长（整型秒数）
        } else {
            return "无法获取视频长度！";
        }
    }

}
?>
